--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_smoke_extended.py ee9ed05338feee2e71aa3c839fd716c9a6bc2315 (ee9ed053) Text, 6.49 KB
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787sys
Tff7b72import T7ee787os
Tff7b72import T7ee787pytest
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787sqlite3
Tff7b72def Td2a8fftest_cli_helpTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for --help flag."""
Te6edf3result Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(
Tb4b4b4[Te6edf3sysTff7b72.Td2a8ffexecutableTb4b4b4, Ta5d6ff"Ta5d6ff-mTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmeshchatx.meshchatTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--helpTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3capture_outputTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3textTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8ffreturncode Tff7b72== T79c0ff0
Tff7b72assert Ta5d6ff"Ta5d6ffusage:Ta5d6ff" Tff7b72in Te6edf3resultTff7b72.Td2a8ffstdoutTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffoptions:Ta5d6ff" Tff7b72in Te6edf3resultTff7b72.Td2a8ffstdoutTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_import_all_backend_modulesTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test to ensure all backend modules can be imported without error."""
Tff7b72import T7ee787importlib
Te6edf3backend_path Tff7b72= Ta5d6ff"Ta5d6ffmeshchatx.src.backendTa5d6ff"
Te6edf3root_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsrcTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72for Te6edf3rootTb4b4b4, Te6edf3dirsTb4b4b4, Te6edf3files Tff7b72in Te6edf3osTff7b72.Td2a8ffwalkTb4b4b4(Te6edf3root_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.pyTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72not Te6edf3fileTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff__Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3rel_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrelpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4, Te6edf3root_dirTb4b4b4)
Te6edf3module_name Tff7b72= Te6edf3rel_pathTff7b72.Td2a8ffreplaceTb4b4b4(Te6edf3osTff7b72.Td2a8ffsepTb4b4b4, Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3full_module_name Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3backend_pathTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff"
Tff7b72tryTb4b4b4:
Te6edf3importlibTff7b72.Td2a8ffimport_moduleTb4b4b4(Te6edf3full_module_nameTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
T8b949e# Skip some modules that might need special environment
Tff7b72if Ta5d6ff"Ta5d6ffbot_processTa5d6ff" Tff7b72in Te6edf3full_module_nameTb4b4b4:
Tff7b72continue
Te6edf3pytestTff7b72.Td2a8fffailTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFailed to import Tffd700{Te6edf3full_module_nameTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_database_migration_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for database migrations from version 0 to latest."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787provider Tff7b72import Te6edf3DatabaseProvider
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787schema Tff7b72import Te6edf3DatabaseSchema
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpdirTb4b4b4:
Te6edf3db_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpdirTb4b4b4, Ta5d6ff"Ta5d6fftest_migration.dbTa5d6ff"Tb4b4b4)
Te6edf3provider Tff7b72= Te6edf3DatabaseProviderTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3schema Tff7b72= Te6edf3DatabaseSchemaTb4b4b4(Te6edf3providerTb4b4b4)
T8b949e# Initialize (runs all migrations)
Te6edf3schemaTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
T8b949e# Verify it reached the latest version
Te6edf3conn Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3connTff7b72.Td2a8ffrow_factory Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffRow
Te6edf3cursor Tff7b72= Te6edf3connTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3cursorTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT value FROM config WHERE key = Ta5d6ff'Ta5d6ffdatabase_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Te6edf3row Tff7b72= Te6edf3cursorTff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3row Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tffa657intTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffvalueTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3DatabaseSchemaTff7b72.Td2a8ffLATEST_VERSION
Te6edf3connTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_markdown_renderer_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for MarkdownRenderer with basic markdown."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787markdown_renderer Tff7b72import Te6edf3MarkdownRenderer
Te6edf3basic_md Tff7b72= Ta5d6ff"Ta5d6ff# HelloTffea00\nTa5d6ffThis is **bold** and *italic*.Ta5d6ff"
Te6edf3result Tff7b72= Te6edf3MarkdownRendererTff7b72.Td2a8ffrenderTb4b4b4(Te6edf3basic_mdTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffHelloTa5d6ff" Tff7b72in Te6edf3result
Tff7b72assert Ta5d6ff"Ta5d6ff<h1Ta5d6ff" Tff7b72in Te6edf3result
Tff7b72assert Ta5d6ff"Ta5d6ff<strong>bold</strong>Ta5d6ff" Tff7b72in Te6edf3result
Tff7b72assert Ta5d6ff"Ta5d6ff<em>italic</em>Ta5d6ff" Tff7b72in Te6edf3result
Te6edf3list_md Tff7b72= Ta5d6ff"Ta5d6ff* item 1Tffea00\nTa5d6ff* item 2Ta5d6ff"
Te6edf3result Tff7b72= Te6edf3MarkdownRendererTff7b72.Td2a8ffrenderTb4b4b4(Te6edf3list_mdTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ff<ulTa5d6ff" Tff7b72in Te6edf3result
Tff7b72assert Ta5d6ff"Ta5d6ffitem 1Ta5d6ff" Tff7b72in Te6edf3result
Tff7b72def Td2a8fftest_config_manager_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for ConfigManager basic operations."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787config_manager Tff7b72import Te6edf3ConfigManager
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpdirTb4b4b4:
Te6edf3db_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpdirTb4b4b4, Ta5d6ff"Ta5d6fftest_config.dbTa5d6ff"Tb4b4b4)
T8b949e# Use the high-level Database class which has the expected structure
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Te6edf3config Tff7b72= Te6edf3ConfigManagerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# Test default value
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffAnonymous PeerTa5d6ff"
T8b949e# Test set and get
Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffsetTb4b4b4(Ta5d6ff"Ta5d6ffNew NameTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffdisplay_nameTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffNew NameTa5d6ff"
T8b949e# Test boolean
Tff7b72assert Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72False
Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3configTff7b72.Td2a8ffauto_announce_enabledTff7b72.Td2a8ffgetTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_telephone_manager_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for TelephoneManager initialization."""
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787telephone_manager Tff7b72import Te6edf3TelephoneManager
T8b949e# Mock identity
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3manager Tff7b72= Te6edf3TelephoneManagerTb4b4b4(Te6edf3identityTb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ffidentity Tff7b72== Te6edf3identity
Tff7b72assert Te6edf3managerTff7b72.Td2a8fftelephone Tff7b72is Tff7b72None T8b949e# Should be None until init_telephone
Tff7b72def Td2a8fftest_voicemail_manager_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for VoicemailManager initialization."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787voicemail_manager Tff7b72import Te6edf3VoicemailManager
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Te6edf3mock_db Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_config Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_tm Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3tmp_dir Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3manager Tff7b72= Te6edf3VoicemailManagerTb4b4b4(Te6edf3mock_dbTb4b4b4, Te6edf3mock_configTb4b4b4, Te6edf3mock_tmTb4b4b4, Te6edf3tmp_dirTb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ffdb Tff7b72== Te6edf3mock_db
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmp_dirTb4b4b4, Ta5d6ff"Ta5d6ffvoicemailsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrecordingsTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72import T7ee787shutil
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3tmp_dirTb4b4b4)
Tff7b72def Td2a8fftest_lxst_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for LXST import and basic structure."""
Tff7b72import T7ee787LXST
Tff7b72assert Tffa657hasattrTb4b4b4(Te6edf3LXSTTb4b4b4, Ta5d6ff"Ta5d6ffTelephoneTa5d6ff"Tb4b4b4) Tff7b72or Tffa657hasattrTb4b4b4(Te6edf3LXSTTb4b4b4, Ta5d6ff"Ta5d6ffPipelineTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_identity_context_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for IdentityContext creation."""
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787identity_context Tff7b72import Te6edf3IdentityContext
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Te6edf3mock_app Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffstorage_dir Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3ctx Tff7b72= Te6edf3IdentityContextTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3mock_appTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffidentity Tff7b72== Te6edf3identity
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffidentity_hash Tff7b72== Te6edf3identityTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72import T7ee787shutil
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3mock_appTff7b72.Td2a8ffstorage_dirTb4b4b4)
Tff7b72def Td2a8fftest_announce_manager_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for AnnounceManager."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787announce_manager Tff7b72import Te6edf3AnnounceManager
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Te6edf3mock_db Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3manager Tff7b72= Te6edf3AnnounceManagerTb4b4b4(Te6edf3mock_dbTb4b4b4)
Tff7b72assert Te6edf3managerTff7b72.Td2a8ffdb Tff7b72== Te6edf3mock_db
Tff7b72def Td2a8fftest_rnstatus_handler_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for RNStatusHandler."""
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787rnstatus_handler Tff7b72import Te6edf3RNStatusHandler
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Te6edf3mock_rns Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3RNStatusHandlerTb4b4b4(Te6edf3mock_rnsTb4b4b4)
Tff7b72assert Te6edf3handlerTff7b72.Td2a8ffreticulum Tff7b72== Te6edf3mock_rns
Tff7b72def Td2a8fftest_lxmf_router_creation_smokeTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Smoke test for create_lxmf_router utility."""
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787meshchat_utils Tff7b72import Te6edf3create_lxmf_router
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3patch
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpdirTb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffLXMF.LXMRouterTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_routerTb4b4b4:
Te6edf3create_lxmf_routerTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3tmpdirTb4b4b4)
Te6edf3mock_routerTff7b72.Td2a8ffassert_calledTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────